package ai.zixing.mashibing.basic_class.class01;

// 局部最小
public class Code06_BSAwesome {

    public static int getLessIndex(int[] arr) {
        if (arr == null || arr.length < 1) {
            return -1;
        }
        int len = arr.length;
        // 只有一个元素或者第一个小于第二个数，则第一个数的下标 0 就是一个局部最小
        if (len == 1 || arr[0] < arr[1]) {
            return 0;
        }
        // 最后一个数小于倒数第二个数，则最后一个属就是一个局部最小
        if (arr[len - 1] < arr[len - 2]) {
            return len - 1;
        }
        // 第一个数和最后一个数讨论过了
        int L = 1;
        int R = len - 2;
        int mid = 0;
        // 0-1上是单调递减的
        while (L < R) {
            mid = L + ((R - L) >> 1);
            // mid - 1 到 mid 单调递增则存在 0 到 mid - 1
            if (arr[mid] > arr[mid -1]) {
                R = mid - 1;
            } else if (arr[mid] > arr[mid + 1]) {
                L = mid + 1;
            } else {
                return mid;
            }
        }
        return L;
    }
}
